const sqlite3 = require('sqlite3').verbose();
const path = require('path');

// 数据库路径
const dbPath = path.join(__dirname, 'database.db');

// 连接数据库
const db = new sqlite3.Database(dbPath, (err) => {
  if (err) {
    console.error('Error opening database:', err.message);
    return;
  }
  console.log('Connected to SQLite database.');
});

// 测试文件API
function testFilesAPI() {
  console.log('测试文件API...');
  
  // 检查files表
  db.all(
    `SELECT name FROM sqlite_master WHERE type='table' AND name='files'`,
    (err, tables) => {
      if (err) {
        console.error('查询表失败:', err.message);
        return;
      }
      
      console.log('\n数据库表检查:');
      console.log('files表存在:', tables.length > 0);
      
      if (tables.length === 0) {
        console.log('\n创建files表...');
        db.run(
          `CREATE TABLE IF NOT EXISTS files (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL UNIQUE,
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP
          )`,
          (err) => {
            if (err) {
              console.error('创建files表失败:', err.message);
            } else {
              console.log('files表创建成功');
              insertDefaultFile();
            }
          }
        );
      } else {
        checkFilesData();
      }
    }
  );
}

// 插入默认文件
function insertDefaultFile() {
  db.run(
    `INSERT OR IGNORE INTO files (name) VALUES (?)`,
    ['苏州配置'],
    function(err) {
      if (err) {
        console.error('插入默认文件失败:', err.message);
      } else {
        console.log('已插入默认文件: 苏州配置');
        checkFilesData();
      }
    }
  );
}

// 检查文件数据
function checkFilesData() {
  console.log('\n查询files表数据:');
  db.all(
    `SELECT * FROM files ORDER BY id`,
    (err, files) => {
      if (err) {
        console.error('查询files表失败:', err.message);
        return;
      }
      
      console.table(files);
      
      if (files.length === 0) {
        console.log('\nfiles表为空，插入默认文件...');
        insertDefaultFile();
      } else {
        // 检查每个文件的配置数据
        console.log('\n检查每个文件的配置数据:');
        files.forEach((file) => {
          db.all(
            `SELECT COUNT(*) as count FROM config_data WHERE file_id = ?`,
            [file.id],
            (err, result) => {
              if (err) {
                console.error(`查询文件 ${file.name} 的配置数据失败:`, err.message);
              } else {
                console.log(`文件 "${file.name}" (ID: ${file.id}) 有 ${result[0].count} 条配置数据`);
              }
            }
          );
        });
        
        // 检查没有file_id的配置数据
        setTimeout(() => {
          db.all(
            `SELECT COUNT(*) as count FROM config_data WHERE file_id IS NULL`,
            (err, result) => {
              if (err) {
                console.error('查询无file_id的配置数据失败:', err.message);
              } else {
                console.log(`\n没有file_id的配置数据: ${result[0].count} 条`);
                
                if (result[0].count > 0) {
                  console.log('\n将无file_id的配置数据关联到第一个文件...');
                  db.run(
                    `UPDATE config_data SET file_id = ? WHERE file_id IS NULL`,
                    [files[0].id],
                    function(err) {
                      if (err) {
                        console.error('更新file_id失败:', err.message);
                      } else {
                        console.log(`已将 ${this.changes} 条配置数据关联到文件 "${files[0].name}"`);
                      }
                      
                      db.close((err) => {
                        if (err) {
                          console.error('关闭数据库失败:', err.message);
                        } else {
                          console.log('\n数据库连接已关闭');
                        }
                      });
                    }
                  );
                } else {
                  db.close((err) => {
                    if (err) {
                      console.error('关闭数据库失败:', err.message);
                    } else {
                      console.log('\n数据库连接已关闭');
                    }
                  });
                }
              }
            }
          );
        }, 1000);
      }
    }
  );
}

// 执行测试
testFilesAPI();